# -*- Makefile -*-
#
# AS A REGULAR M4M USER, YOU SHOULD NOT HAVE TO CHANGE ANYTHING IN THIS FILE 
#

################################################################################
# Auxiliary functions                                                          #
################################################################################

# lock/unlock
# $(lock) creates a directory $@.lock to signal that the respective resource 
# is under construction. The lock is removed upon successful resource creation.
# mkdir is defined as an atomic operation under POSIX, so directory creation 
# is a safe way of creating a lock. We create a file with 'owner' information, 
# so that we can check if the creating process is still 
# call as: $(lock) 

ifneq ($(filter n,${MAKEFLAGS}),n)
define lock
@mkdir -p ${@D};
@mkdir $@.lock
@echo "Started at $(shell date) by process $(shell echo $$PPID) on host $(shell hostname)" \
	> $@.lock/owner
endef
else
lock := 
endif

ifneq ($(filter n, ${MAKEFLAGS}),n)
define unlock
@rm $@.lock/owner;
@rmdir $@.lock
endef
else
unlock := 
endif

# clear_variable allows us to clear a variable from within a function
# the whitespace before and after appears to be necessary to ensure 
# things happen at the beginning of a new line, and there's a new line after
define clear_variable

$1 :=

endef

define clear-ptables

PTABLES :=
PTABLE_ENTRIES :=

endef

define clear-dtables

DTABLES :=
DTABLE_ENTRIES :=

endef

define clear-lmodels

LMODELS :=
LMODEL_ENTRIES :=

endef
clear-locks: | $(shell find -L -type d -name '*.lock')
	rm -rf $|

